single-spa add sub app
Core 概念
parent app
sub apps
import-map
1. Add exsiting code
example:
I find a good page in https://react.microfrontends.app/planets
https://gyazo.com/27c358261dee9890cc8de8143142a6d5
I'd like to add this page in my project.
How to do?
1. import the code using import-map in parent app
code:importmap
<!-- Step 1 -->
<script type="systemjs-importmap" src="importmap/react-mf-importmap.json"></script>
2. register application in parent app
code:registerApplication
// Step 2:
registerApplication({
name: '@react-mf/planets',
app: () => System.import('@react-mf/planets'),
activeWhen: '/planets',
});
3. modify a little CSS
code:css
<!-- Step 3 -->
<style>
divid$="planets" {
margin-left: var(--navbar-width)
}
</style>
Commit: https://github.com/atom-admin/mf-dog-parent-app/pull/2/commits/70c572ce222b5b39a9415f67560edef15e265c06
Preview:
https://gyazo.com/3c0f312c99594a4b84e00df36fa47896
2 Add the new code
Vue3
How to setup a sub-app of single-spa(https://single-spa.js.org/)
1. set public path
2. export bootstrap mount unmount
3. build as system module
4. add your code in import-map
5. register application in parent app
6. preview
1. set public path
code:install
$ yarn add systemjs-webpack-interop
code:set-public-path.js
import { setPublicPath } from 'systemjs-webpack-interop';
setPublicPath('@svelte-mf/posts');
2. export bootstrap mount unmount
`js
code:main.js
import './set-public-path';
import singleSpaSvelte from 'single-spa-svelte';
import App from './App.svelte';
const svelteLifecycles = singleSpaSvelte({
component: App,
});
export const bootstrap = svelteLifecycles.bootstrap;
export const mount = svelteLifecycles.mount;
export const unmount = svelteLifecycles.unmount;
3. modify webpack-config.js for build system
code:webpack-config.js
module.exports = {
output: {
path: __dirname + '/public',
filename: 'name.js',
++ libraryTarget: 'system',
chunkFilename: 'name.id.js',
},
4. add your code in import-map
code:importmap.json
{
"imports": {
...
"@svelte-mf/posts": "http://localhost:8080/app.js"
}
}
5. register application in parent app
code:registerApplication
registerApplication(
'@svelte-mf/posts',
() => System.import('@svelte-mf/posts'),
(location) => location.pathname.startsWith('/posts')
);
6. preview
https://gyazo.com/8dddaab5b0ed905f9a992ef0b8679d5a
source code: https://github.com/atom-admin/svelte-mf-posts
CSS 考えから
code
親から子供通信
window notification
sockjs
API
props
#micro_frontends
#single-spa
created by TJ